/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.acworks.acroute.v2;

import java.util.Set;

/**
 * copy of a static graph with partialPath overlaid. Overlaying
 * a given partial path alters this graph's Arc set.
 * @author nikita
 */
public interface PathAwareGraph extends Graph {

    Path getPartialPath();

    /**
     *
     * @param node
     * @param orinating
     * @param requiredType (optional)
     * @return collection of directed arcs originating (terminating) at given node.
     * Collection is optionally filtered by 'required' type
     */
    Set<Arc> getIncidentDirectedArcs(Node node, boolean orinating, ArcRequiredType requiredType);

    Set<Arc> getRequiredArcs();

    /**
     * admissibility test as described in Section 5 of
     *  http://portal.acm.org/citation.cfm?id=321854
     *
     * @return true only if this path is admissible
     */
    boolean isPartialPathAdmissible();
}
